﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BL.Service
{
    public class Permute
    {
        public int count = 0;
        public List<string> result { get; set; }
        private void swap(ref char a, ref char b)
        {

            if (a == b) return;

            a ^= b;

            b ^= a;

            a ^= b;

        }

        public void setper(char[] list)
        {

            int x = list.Length - 1;

            go(list, 0, x);

        }

        private void go(char[] list, int k, int m)
        {

            int i;

            if (k == m)
            {
                string numCheck = new string(list);
                if (result == null)
                {
                    result = new List<string>();

                }
                bool canAddToResult = (from n in result where n == numCheck select n).ToList().Count == 0;
                if (canAddToResult)
                {
                    result.Add(numCheck);
                    //Console.Write(list);
                    count += 1;
                    //Console.WriteLine(" ");
                }



            }

            else

                for (i = k; i <= m; i++)
                {

                    swap(ref list[k], ref list[i]);

                    go(list, k + 1, m);

                    swap(ref list[k], ref list[i]);

                }

        }
    }
}
